package jp.co.menox.controller.tmserver.gate;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;

import jp.co.menox.controller.tmserver.TmServerControllerBase;
import jp.co.menox.tmcommon.model.Lending;
import jp.co.menox.tmserver.searchform.SampleSearchForm;
import jp.co.menox.tmserver.service.CategoryService;
import jp.co.menox.tmserver.service.LendingService;

import org.slim3.controller.Navigation;
import org.slim3.util.BeanUtil;

/**
 * 検索条件による一覧リストの表示のサンプル
 * @author
 *
 */
public class SampleSearchController extends TmServerControllerBase {

    protected LendingService service;
    protected CategoryService categoryService;
    {
        service = new LendingService();
        categoryService = new CategoryService();
    }

    /**
     * リクエスト処理の前処理<br />
     * 普通はこのメソッドのOverrideは不要。<br />
     * 何か画面個別で前処理が必要な場合は以下のように記述する。
     */
    @Override
    protected Navigation setUp() {
        
        // TODO: サンプル　画面個別にsetUp()が必要な場合の記述の仕方
        
        Navigation navi = super.setUp();
        if (navi != null) {
            // 共通処理でエラーになった場合
            return navi;
        }

        // TODO: ここから先に記述する。
        
        return null;
    }

    @Override
    public Navigation run() throws Exception {
        
        // 検索条件は、検索条件form/modelを定義して、なるべく一括copyできるようにする。
        SampleSearchForm searchForm = new SampleSearchForm();
        BeanUtil.copy(request, searchForm);

//        searchForm.setNumberInPage(3);
//        System.out.println("----- 変更前 -----");
//        System.out.println("条件１　" + searchForm.getCate1() + " " + searchForm.getCate1Filter());
//        System.out.println("条件２　" + searchForm.getCate2() + " " + searchForm.getCate2Filter());
//        System.out.println("ページあたりのレコード数　" + searchForm.getNumberInPage());
//        System.out.println("全レコード数　" + searchForm.getMaximumNumber());
//        System.out.println("全ページ数　" + searchForm.getMaximumPageNumber());
//        System.out.println("表示対象ページ　" + searchForm.getCurrentPage());
//        System.out.println("表示レコード範囲　" 
//                + searchForm.getStartNumberInPage() + " - " 
//                + searchForm.getEndNumberInPage());

        // 表示用リストを取得する
        List<Lending> modelList;
        String command = this.asString("command");
        if (command == null || !command.equals("search")) {
            // 初期呼び出し／検索ではない：　初期表示では空リスト
            modelList = Collections.<Lending>emptyList();
        } else {
            // 検索：表示対象行範囲の切り出し
            modelList = service.getLendingListWithSearchingCondition(searchForm);
        }

        // 表示用mapの取得
        Map<Long, String> categoryMap = categoryService.getCategoryMap();
        Map<Long, String> userMap = userService.getUserMap();

        // 表示用変数設定
        requestScope("lendingList", modelList);
        requestScope("cateMap", categoryMap);
        requestScope("userMap", userMap);
        requestScope("searchForm", searchForm);
        
        return forward("sampleSearch.jsp");
    }
}
